#pragma once

#include <string>
#include <cstdint>
#include <chrono>
#include <vector>
#include <algorithm> 

namespace sysmonitor {
namespace network {

// 网络接口信息
struct NetworkInterface {
    std::string name;             // 接口名称（如 "eth0"、"wlan0"）
    std::string ipAddress;        // IP地址
    std::string macAddress;       // MAC地址
    bool isUp = false;            // 是否启用
    uint64_t bytesReceived = 0;   // 接收字节数
    uint64_t bytesSent = 0;       // 发送字节数
};

// 网络流量信息
struct NetworkTraffic {
    std::string interface;        // 接口名称
    uint64_t bytesReceived = 0;   // 总接收字节数
    uint64_t bytesSent = 0;       // 总发送字节数
    double receiveRate = 0.0;     // 接收速率(B/s)
    double sendRate = 0.0;        // 发送速率(B/s)
    std::chrono::system_clock::time_point timestamp; // 时间戳
};

// 网络监控器，用于计算流量速率
class NetworkMonitor {
private:
    std::vector<NetworkTraffic> previousTraffic_;
    std::chrono::system_clock::time_point previousTime_;

public:
    NetworkMonitor();
  
    // 获取所有网络接口信息
    std::vector<NetworkInterface> getNetworkInterfaces();
  
    // 获取当前网络流量
    std::vector<NetworkTraffic> getCurrentTraffic();

    // 计算网络流量速率（需要调用两次，间隔一段时间）
    std::vector<NetworkTraffic> calculateTrafficRates();
};

} // namespace network
} // namespace sysmonitor

